The single source of truth for what OnWeight is, what's designed, and what's ready for dev. OnWeight is a weight-cut companion for combat athletes: it reads the daily weigh-in trend, projects it to weigh-in day, and gives a plain-language verdict on whether the athlete makes weight safely and on time. One visual direction (Balanced), iPhone, off-white surface. Status (current): every screen and state in this spec is now designed in the prototype — onboarding, the daily log, the full lifecycle, plus empty / error / settings / confirmation states, all seven sports and localization. What remains is engine & back-end integration (live recalculation, persistence, push delivery), not screen design.
Four tabs, each scoped to the active camp, plus Log as a primary action (a daily act, not a destination).
| Tab | Owns |
|---|---|
| Today | Renders the current lifecycle state. Hero weight, pace verdict, log action. The screen that changes most. |
| Plan | The camp: target, timeline, division rules, rehydration, personalisation toggles. Home of plan refinement. |
| Trend | Chart, full history, recent log, weekly check-ins, cycle context. |
| More | Profile, past camps (archive), settings, learn. |
| Log | Primary action (not a tab) — opens weight entry from anywhere; deep-links to the result. |
A camp is a bounded effort with a target (division limit) and usually a date (weigh-in). Today re-skins per state. Branches handle the messy reality.
| State | Trigger | Today leads with | |
|---|---|---|---|
| No camp | Off-season / between fights | Maintenance weight + "Start a camp" | awaiting approval |
| Setup | Athlete starts a camp | Onboarding / new-camp flow | awaiting approval |
| Active | Plan live, > ~1 wk out | Pace verdict, projection, trend, log | awaiting approval |
| Fight Week | ≈ T-7 | Working target + descent protocol + today's job | awaiting approval |
| Weigh-in Day | T-0 | One job: record the official number | awaiting approval |
| Outcome | Number entered | Made → rebuild · Missed → support | awaiting approval |
| Fight Result | After the bout | Won / Lost / No contest → archive | awaiting approval |
| Recovery | Post-fight | Rehydrate, refeed, reflect | awaiting approval |
| Paused / Cancelled | Fight moved / fell through | Stop projecting; keep or archive data | awaiting approval |
Happy path: No camp → Setup → Active → Fight Week → Weigh-in → Outcome → Fight → Result → Recovery → Archived. New camp loops back to Setup, pre-filled from history.
Hero weight numeral + unit + logged time + tone-coloured pace badge. Add-weight CTA. "How you're tracking" card (diagnosis + human synopsis + divider + Projected / Limit / Hits-limit stats; taps into detail). Weight-trend chart card.
States: 4 pace · log-time placement · button style
Pushed from the tracking card. Headline diagnosis, 3-part interpretation (fact → why → action), "The projection" + "Your pace" grouped readouts.
States: 4 pace
Logged confirmation, a calm habit-reward consistency strip (“every morning this week” — rewards showing up, never shames pace), result headline/sub, Weekly + Projected stats with per-number verdicts, "What this means" card, CTA (Back to Today / Review plan).
States: 4 pace
Number pad with live input + date row, behind Log. Accepts a typed weight, saves, and deep-links to the result (whose verdict now reflects the logged number).
States: empty · filled · edit date
About-this-camp hero (class limit / your target + divider), competition rules, rehydration rules, personalisation toggles (cycle, gear, rehydration clause, hydration testing).
Onboarding payoff: cut summary, today→fight-weight, "why this works," weekly-adapt, a full-bleed social-proof band (sport stat + a real, attributed fighter quote), and the unlock CTA — a 7-day free trial over a 2–3 plan offer with the annual default pre-selected.
Progressive personalisation via the Refine-plan flow (weigh-in time, cycle, competition rules). Lives in Plan; nudged from Today. Each detail tightens the projection.
Change-plan screens (move division / move date / hold safe) + the granular competition-rules sub-flow (equipment, re-weigh, hydration). Target recompute is engine work.
This-camp card (headline + divider + Start / Now / To-go), weight trajectory chart + legend, recent-log list.
Current-phase hero with the expected-water cycle curve + "you're here" marker, cycle setup, expected weight by phase.
The "Weeks" view: check-ins x/7, weekly loss %, average. Where the adaptive goal recalculates (recalculation logic is engine work).
Working-target card (division limit / cyclical water / work-to), today's job + progress, the descent protocol (StepList).
Single job: record the official number. Reference stats (this morning / working target / limit).
One template (OutcomeScreen). Shared hero number + diff line + divider + headline. Made → rebuild plan. Missed → acknowledgement only, no actions.
Won / Lost / No contest selection → closes the camp, feeds the archive.
Opens on the app-open splash + loading (animated — see Launch Splash). Then ~20 frames, mapped from the source flow set: auth → sport → fight date or open-ended rate → biological sex → weigh-in time + reminder → [female] cycle on / period date / length / phase changes → confirm sport rules (equipment, re-weigh, hydration) → current weight → limit (a one-tap division picker — natural class starred, scale target autofilled, keypad fallback) → cut rate → cut strategy → check details → loading → Plan Preview → paywall.
Log in, forgot password, reset-link sent, email/2-factor code verify. Account creation lives in onboarding.
Today before first log, empty trend, empty past-camps, first-week check-in. Each keeps the real screen's chrome.
Offline (log queued), save failed, sync failed, purchase declined + restore, notifications denied, duplicate-account.
Notifications, Account & units, unit switch (kg↔lb), subscription management, privacy & data + delete, camp↔maintenance transition confirms.
Cancel fight / delete camp / change goal confirms, the iOS permission prompt, and the morning weigh-in push on the lock screen.
Today rendered across eight locales — including two RTL (Arabic, Hebrew) and CJK (Japanese, Korean) — to prove the layout, fonts and numerals localize per sport-audience.
Create account (Apple / Google / email), email verification, the required safety disclaimer (no crash cuts · guidance not medical advice · listen to your body), and the age gate — OnWeight is 18+ only; under-18 is not eligible.
In-app Terms of Service and Privacy Policy (incl. a Health & safety clause), plus data-rights controls: export my data, delete account / data.
The five ⓘ strategy explainers (Low Fibre · Low Sodium · Sweat Out · Low Carb · Water Load) with dosages + safety ceilings, and the ±20 kg out-of-healthy-range goal gate (with a keep-anyway branch).
Home Screen (small + medium) and Lock Screen complications: weight, on-track state, days to weigh-in at a glance. Post-launch retention surface.
The app is paywalled end-to-end, so the money path is complete: free-trial paywall, trial-running state, plan compare, manage / cancel subscription, payment method, billing history.
The full push content set in the coach's voice (copy + triggers + cadence), stacked lock-screen design, Apple Health & smart-scale sync, and reminder-permission priming.
Pounds on every weight-bearing screen for the US market. Weights stay stored in kg (projection math untouched) and convert at the edge — Today, Log, divisions, plan.
The drill-ins the rows imply: value editors (name / email / password), time & date pickers, Help & feedback, weigh-in / week / past-camp detail, and the Learn article reader.
Mapped, not built — roadmap concepts parked in a sandbox and reachable only via the jump menu, never wired into a live screen: tapered plan shape, Learn library (video + articles), Fuel / nutrition, Devices & sync, Coach AI chat, Find-your-fight competition picker, plus the re-engagement set (win-back, smarter next camp, reminder re-ask) and a coach roster view. Deliberately out of Release 1 — see OnWeight - Feature List.html.
All seven disciplines have rules data, a plan and a coach's read: Boxing, MMA, Muay Thai (free-entry), BJJ (gi + no-gi), Taekwondo, Judo, Wrestling. See OnWeight - Rules Verification.md — all rules are now verified against governing bodies (Taekwondo +5% confirmed vs WT Competition Rules Art. 9 §2.2); the only open items are product decisions (Boxing category names; pro-boxing / World-Championship sets not modelled).
The engine: smooth the daily weigh-ins (EWMA trend) → project to weigh-in day → classify pace → diagnose. The dashboard leads with a coloured diagnosis + a human synopsis (good / bad and why); the detail carries the full fact → why → action.
| State | Diagnosis | Synopsis | Tone |
|---|---|---|---|
| On track | Making weight | Safe, steady; makes weight without draining power | green |
| Too fast | Cutting too fast | Quicker than needed; costs strength & recovery | amber |
| Behind | Slightly behind | A touch slow, easy fix this week | amber |
| Off pace | Off the pace | Too slow to make weight safely; rework the plan | red |
Red is reserved for genuine risk. Diagnosis stays honest but never alarmist ("Off the pace," not "Missing weight"). Each result also tags individual numbers (e.g. "Could be too low," "Not enough loss").
Always water / fluid, never body composition. Matter-of-fact and in control.
Type: IBM Plex Sans (UI + numerals), IBM Plex Mono (labels / data), Oswald (eyebrows + section headers). Off-white page, white cards, red as a sparing pop. Every screen is assembled from one shared kit so they stay identical:
Cards that pair copy with numbers use a horizontal rule between the two (working target, about-this-camp, how-you're-tracking, this-camp).
The screen designs are complete. The remaining work is wiring and back-end, plus two sign-off items tracked in sibling docs.